package dao.jpa;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import domain.Page;

public interface Dao<T> {
	/***
	 * 保存
	 * @param entity 实体对象
	 */
	public abstract void save(T entity);
	
	/***
	 * 删除
	 * @param entityId 实体对象id
	 */
	public abstract void remove(Serializable entityId);
	
	/***
	 * 更新
	 * @param entity 一个投管或游离得实体对象
	 */
	public abstract void update(T entity);
	
	/***
	 * 根据id获得实体对象
	 * @param entityId 实体对象id
	 * @return 实体对象
	 */
	public abstract T get(Serializable entityId);
	
	/***
	 * 获得表总记录行数
	 * @return 记录行数
	 */
	public abstract Long getCount();
	
	/***
	 * 根据hql来查找
	 * @param hql hql语句
	 * @param param hql参数
	 * @return list的实体对象
	 */
	public abstract List<T> findByHql(String hql,Object... param);
	
	
	/***
	 * 根据hql来查找，且只返回第一行记录
	 * @param hql hql语句
	 * @param param hql参数
	 * @return list的实体对象
	 */
	public abstract T getByHql(String hql,Object... param);
	
	/***
	 * 根据hql来查找，且只返回第一行第一列记录
	 * @param hql
	 * @param param
	 * @return
	 */
	public abstract Object getFirstResult(String hql,Object... param);
	/***
	 * 查询表中所有得数据
	 * @return
	 */
	public abstract List<T> findAll();
	
	/***
	 *  分页查询
	 * @param page 一个页码配置bean
	 * @return 页码配置bean
	 */
	public abstract Page<T> findByPage(Page<T> page);
	
	/***
	 * 增删改语句执行
	 * @param hql hql语句
	 * @param param hql参数
	 */
	public abstract void execute(String hql,Object... param);

	void updateByHql(Map<String, Object> datas, String whereSql, Object[] whereParams);

	void updateById(Map<String, Object> datas, Serializable id);

	void removes(Object... ids);
	
	
	
}